namespace my_stack
{
    template<class T, class Container = deque<T>>
    class stack
    {
    public:
        stack() {}

        void push(const T& x) { _con.push_back(x); }

        void pop() { _con.pop_back(); }

        bool empty() const { return _con.empty(); }

        T& top() { return _con.back(); }
        const T& top() const { return _con.back(); }

        size_t size() { return _con.size(); }

    private:
        Container _con;
    };
}
